{
  "bundles": [
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-audit-core",
      "artifactVersion": "2021.63.8",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.audit.api",
          "org.nuxeo.ecm.platform.audit.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit",
        "id": "grp:org.nuxeo.ecm.platform.audit",
        "name": "org.nuxeo.ecm.platform.audit",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2021.63"
      },
      "bundleId": "org.nuxeo.ecm.platform.audit",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.persistence.PersistenceComponent--hibernate",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.persistence/Contributions/org.nuxeo.ecm.platform.audit.service.persistence--hibernate",
              "id": "org.nuxeo.ecm.platform.audit.service.persistence--hibernate",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.persistence.PersistenceComponent",
                "name": "org.nuxeo.ecm.core.persistence.PersistenceComponent",
                "type": "service"
              },
              "version": "2021.63.8",
              "xml": "<extension point=\"hibernate\" target=\"org.nuxeo.ecm.core.persistence.PersistenceComponent\">\n    <hibernateConfiguration name=\"nxaudit-logs\">\n      <datasource>nxaudit-logs</datasource>\n      <properties>\n        <property name=\"hibernate.hbm2ddl.auto\">update</property>\n      </properties>\n    </hibernateConfiguration>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.persistence",
          "name": "org.nuxeo.ecm.platform.audit.service.persistence",
          "requirements": [],
          "resolutionOrder": 285,
          "services": [],
          "startOrder": 278,
          "version": "2021.63.8",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.audit.service.persistence\">\n\n  <extension target=\"org.nuxeo.ecm.core.persistence.PersistenceComponent\"\n    point=\"hibernate\">\n    <hibernateConfiguration name=\"nxaudit-logs\">\n      <datasource>nxaudit-logs</datasource>\n      <properties>\n        <property name=\"hibernate.hbm2ddl.auto\">update</property>\n      </properties>\n    </hibernateConfiguration>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxaudit-persistence-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.core.types-contrib/Contributions/org.nuxeo.ecm.platform.audit.core.types-contrib--schema",
              "id": "org.nuxeo.ecm.platform.audit.core.types-contrib--schema",
              "registrationOrder": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2021.63.8",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"basicauditsearch\" prefix=\"bas\" src=\"schemas/basicauditsearch.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.core.types-contrib/Contributions/org.nuxeo.ecm.platform.audit.core.types-contrib--doctype",
              "id": "org.nuxeo.ecm.platform.audit.core.types-contrib--doctype",
              "registrationOrder": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2021.63.8",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"ForceAudit\"/>\n\n    <doctype extends=\"Document\" name=\"BasicAuditSearch\">\n      <schema name=\"basicauditsearch\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"common\"/>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.core.types-contrib",
          "name": "org.nuxeo.ecm.platform.audit.core.types-contrib",
          "requirements": [],
          "resolutionOrder": 286,
          "services": [],
          "startOrder": 273,
          "version": "2021.63.8",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.audit.core.types-contrib\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"basicauditsearch\" prefix=\"bas\" src=\"schemas/basicauditsearch.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <facet name=\"ForceAudit\" />\n\n    <doctype name=\"BasicAuditSearch\" extends=\"Document\">\n      <schema name=\"basicauditsearch\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"common\" />\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-type-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.directoryContrib/Contributions/org.nuxeo.audit.directoryContrib--directories",
              "id": "org.nuxeo.audit.directoryContrib--directories",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2021.63.8",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-vocabulary\" name=\"eventTypes\">\n      <dataFile>directories/event-types.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n    <directory extends=\"template-vocabulary\" name=\"eventCategories\">\n      <dataFile>directories/event-categories.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.directoryContrib",
          "name": "org.nuxeo.audit.directoryContrib",
          "requirements": [],
          "resolutionOrder": 287,
          "services": [],
          "startOrder": 46,
          "version": "2021.63.8",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.directoryContrib\">\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"eventTypes\" extends=\"template-vocabulary\">\n      <dataFile>directories/event-types.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n    <directory name=\"eventCategories\" extends=\"template-vocabulary\">\n      <dataFile>directories/event-categories.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/directories-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.PageProviderservice.contrib/Contributions/org.nuxeo.ecm.platform.audit.PageProviderservice.contrib--providers",
              "id": "org.nuxeo.ecm.platform.audit.PageProviderservice.contrib--providers",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2021.63.8",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\" name=\"DOCUMENT_HISTORY_PROVIDER_OLD\">\n      <whereClause docType=\"BasicAuditSearch\">\n        <fixedPart>\n          log.docUUID = ?\n        </fixedPart>\n        <predicate operator=\"BETWEEN\" parameter=\"log.eventDate\">\n          <field name=\"startDate\" schema=\"basicauditsearch\"/>\n          <field name=\"endDate\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.category\">\n          <field name=\"eventCategories\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"log.eventId\">\n          <field name=\"eventId\" schema=\"basicauditsearch\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"true\" column=\"log.eventDate\"/>\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\" name=\"LATEST_AUDITED_CREATED_USERS_OR_GROUPS_PROVIDER\">\n      <whereClause docType=\"BasicAuditSearch\">\n        <fixedPart>\n          log.eventId = 'user_created' OR log.eventId = 'group_created'\n        </fixedPart>\n      </whereClause>\n      <sort ascending=\"false\" column=\"log.eventDate\"/>\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.audit.provider.LatestCreatedUsersOrGroupsPageProvider\" name=\"LATEST_CREATED_USERS_OR_GROUPS_PROVIDER\">\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.audit.api.document.DocumentHistoryPageProvider\" name=\"DOCUMENT_HISTORY_PROVIDER\">\n      <whereClause docType=\"BasicAuditSearch\">\n        <predicate operator=\"BETWEEN\" parameter=\"log.eventDate\">\n          <field name=\"startDate\" schema=\"basicauditsearch\"/>\n          <field name=\"endDate\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"log.category\">\n          <field name=\"eventCategory\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.category\">\n          <field name=\"eventCategories\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"log.eventId\">\n          <field name=\"eventId\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.eventId\">\n          <field name=\"eventIds\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"log.principalName\">\n          <field name=\"principalName\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.principalName\">\n          <field name=\"principalNames\" schema=\"basicauditsearch\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"false\" column=\"log.eventDate\"/>\n      <sort ascending=\"false\" column=\"log.id\"/>\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.PageProviderservice.contrib",
          "name": "org.nuxeo.ecm.platform.audit.PageProviderservice.contrib",
          "requirements": [],
          "resolutionOrder": 289,
          "services": [],
          "startOrder": 271,
          "version": "2021.63.8",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.audit.PageProviderservice.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <genericPageProvider name=\"DOCUMENT_HISTORY_PROVIDER_OLD\"\n      class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\">\n      <whereClause docType=\"BasicAuditSearch\">\n        <fixedPart>\n          log.docUUID = ?\n        </fixedPart>\n        <predicate parameter=\"log.eventDate\" operator=\"BETWEEN\">\n          <field schema=\"basicauditsearch\" name=\"startDate\" />\n          <field schema=\"basicauditsearch\" name=\"endDate\" />\n        </predicate>\n        <predicate parameter=\"log.category\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventCategories\" />\n        </predicate>\n        <predicate parameter=\"log.eventId\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"eventId\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"log.eventDate\" ascending=\"true\" />\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"LATEST_AUDITED_CREATED_USERS_OR_GROUPS_PROVIDER\"\n      class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\">\n      <whereClause docType=\"BasicAuditSearch\">\n        <fixedPart>\n          log.eventId = 'user_created' OR log.eventId = 'group_created'\n        </fixedPart>\n      </whereClause>\n      <sort column=\"log.eventDate\" ascending=\"false\" />\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"LATEST_CREATED_USERS_OR_GROUPS_PROVIDER\"\n      class=\"org.nuxeo.ecm.platform.audit.provider.LatestCreatedUsersOrGroupsPageProvider\">\n    </genericPageProvider>\n\n    <genericPageProvider name=\"DOCUMENT_HISTORY_PROVIDER\"\n      class=\"org.nuxeo.ecm.platform.audit.api.document.DocumentHistoryPageProvider\">\n      <whereClause docType=\"BasicAuditSearch\">\n        <predicate parameter=\"log.eventDate\" operator=\"BETWEEN\">\n          <field schema=\"basicauditsearch\" name=\"startDate\" />\n          <field schema=\"basicauditsearch\" name=\"endDate\" />\n        </predicate>\n        <predicate parameter=\"log.category\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"eventCategory\" />\n        </predicate>\n        <predicate parameter=\"log.category\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventCategories\" />\n        </predicate>\n        <predicate parameter=\"log.eventId\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"eventId\" />\n        </predicate>\n        <predicate parameter=\"log.eventId\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventIds\" />\n        </predicate>\n        <predicate parameter=\"log.principalName\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"principalName\" />\n        </predicate>\n        <predicate parameter=\"log.principalName\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"principalNames\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"log.eventDate\" ascending=\"false\" />\n      <sort column=\"log.id\" ascending=\"false\" />\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentation": "\n    Core IO registered marshallers set.\n  \n",
          "documentationHtml": "<p>\nCore IO registered marshallers set.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.io.marshallers/Contributions/org.nuxeo.ecm.platform.audit.io.marshallers--marshallers",
              "id": "org.nuxeo.ecm.platform.audit.io.marshallers--marshallers",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2021.63.8",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <!-- preview document enricher -->\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryCSVWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryListCSVWriter\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.io.marshallers",
          "name": "org.nuxeo.ecm.platform.audit.io.marshallers",
          "requirements": [],
          "resolutionOrder": 291,
          "services": [],
          "startOrder": 275,
          "version": "2021.63.8",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.audit.io.marshallers\" version=\"1.0.0\">\n  <documentation>\n    Core IO registered marshallers set.\n  </documentation>\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <!-- preview document enricher -->\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryCSVWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryListCSVWriter\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentation": "Contribute the search event to the Audit configuration :\n    this is\n    only safe to do so when the ES backend if used for Audit\n  \n",
          "documentationHtml": "<p>\nContribute the search event to the Audit configuration :\nthis is\nonly safe to do so when the ES backend if used for Audit\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.user.contrib/Contributions/org.nuxeo.ecm.platform.audit.user.contrib--event",
              "id": "org.nuxeo.ecm.platform.audit.user.contrib--event",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2021.63.8",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n    <event name=\"user_created\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"user_deleted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"user_modified\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"group_created\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"group_deleted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"group_modified\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"retentionActiveChanged\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retentionActive}\" key=\"retentionActive\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"blobDigestUpdated\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.oldKey}\" key=\"oldKey\"/>\n        <extendedInfo expression=\"${message.properties.oldDigest}\" key=\"oldDigest\"/>\n        <extendedInfo expression=\"${message.properties.newKey}\" key=\"newKey\"/>\n        <extendedInfo expression=\"${message.properties.newDigest}\" key=\"newDigest\"/>\n      </extendedInfos>\n    </event>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.user.contrib",
          "name": "org.nuxeo.ecm.platform.audit.user.contrib",
          "requirements": [],
          "resolutionOrder": 292,
          "services": [],
          "startOrder": 279,
          "version": "2021.63.8",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.audit.user.contrib\" version=\"1.0\">\n\n  <documentation>Contribute the search event to the Audit configuration :\n    this is\n    only safe to do so when the ES backend if used for Audit\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\"\n    point=\"event\">\n    <event name=\"user_created\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"user_deleted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"user_modified\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"group_created\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"group_deleted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"group_modified\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"retentionActiveChanged\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retentionActive}\" key=\"retentionActive\" />\n      </extendedInfos>\n    </event>\n    <event name=\"blobDigestUpdated\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.oldKey}\" key=\"oldKey\" />\n        <extendedInfo expression=\"${message.properties.oldDigest}\" key=\"oldDigest\" />\n        <extendedInfo expression=\"${message.properties.newKey}\" key=\"newKey\" />\n        <extendedInfo expression=\"${message.properties.newDigest}\" key=\"newDigest\" />\n      </extendedInfos>\n    </event>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/user-audit-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
          "declaredStartOrder": 51,
          "documentation": "\n    Service that deals with audit.\n    <p/>\n\n    Most of the work is done at EJB layer though.\n\n    This supports JMS events based\n    notifications on a dedicated topic.\n\n    @version 1.0\n    @author Julien Anguenot\n  \n",
          "documentationHtml": "<p>\nService that deals with audit.\n</p><p>\nMost of the work is done at EJB layer though.\n</p><p>\nThis supports JMS events based\nnotifications on a dedicated topic.\n</p><p>\n&#64;version 1.0\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.EventDescriptor"
              ],
              "documentation": "\n      This service registers auditable events.\n      <p/>\n\n      Registered events are dummy strings for now.\n      <p/>\n\n      This service is used to filter auditable events from the JMS topic based\n      on their names. The following XML snipset give figures out how the default\n      event types are selected for auditing.\n\n      <programlisting>\n    <extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n        <event name=\"documentCreated\"/>\n        <event name=\"documentCreatedByCopy\"/>\n        <event name=\"documentDuplicated\"/>\n        <event name=\"documentMoved\"/>\n        <event name=\"documentRemoved\"/>\n        <event name=\"documentModified\"/>\n        <event name=\"documentLocked\"/>\n        <event name=\"documentUnlocked\"/>\n        <event name=\"documentSecurityUpdated\"/>\n        <event name=\"lifecycle_transition_event\"/>\n        <event name=\"documentTrashed\"/>\n        <event name=\"documentUntrashed\"/>\n    </extension>\n</programlisting>\n",
              "documentationHtml": "<p>\nThis service registers auditable events.\n</p><p>\nRegistered events are dummy strings for now.\n</p><p>\nThis service is used to filter auditable events from the JMS topic based\non their names. The following XML snipset give figures out how the default\nevent types are selected for auditing.\n</p><p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "label": "event (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "event",
              "version": "2021.63.8"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.ExtendedInfoDescriptor"
              ],
              "documentation": "\n      This service registered extended info mappings.\n\n      <p/>\n\n      This service is used to evaluate EL expression using document as context\n      regist:ering results into a map indexed by names.\n    \n",
              "documentationHtml": "<p>\nThis service registered extended info mappings.\n</p><p>\nThis service is used to evaluate EL expression using document as context\nregist:ering results into a map indexed by names.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--extendedInfo",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--extendedInfo",
              "label": "extendedInfo (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "extendedInfo",
              "version": "2021.63.8"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.AdapterDescriptor"
              ],
              "documentation": "\n      register the adapter that will be injected in EL context\n    \n",
              "documentationHtml": "<p>\nregister the adapter that will be injected in EL context\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--adapter",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--adapter",
              "label": "adapter (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "adapter",
              "version": "2021.63.8"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.AuditBackendDescriptor"
              ],
              "documentation": "\n      Allows to register a backend implementation for the Audit Service\n    \n",
              "documentationHtml": "<p>\nAllows to register a backend implementation for the Audit Service\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "label": "backend (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "backend",
              "version": "2021.63.8"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.AuditStorageDescriptor"
              ],
              "documentation": "\n      Allows to register a storage implementation for the Audit Service\n    \n",
              "documentationHtml": "<p>\nAllows to register a storage implementation for the Audit Service\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--storage",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--storage",
              "label": "storage (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "storage",
              "version": "2021.63.8"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.AuditBulkerDescriptor"
              ],
              "documentation": "\n      CAUTION: Deprecated since 10.10, audit bulker is now handled with nuxeo-stream, no replacement\n      Allows to configure bulk processing\n    \n",
              "documentationHtml": "<p>\nCAUTION: Deprecated since 10.10, audit bulker is now handled with nuxeo-stream, no replacement\nAllows to configure bulk processing\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--bulk",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--bulk",
              "label": "bulk (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "bulk",
              "version": "2021.63.8"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Those default auditable events match Nuxeo core base events.\n      <p/>\n\n      If you are sending new Nuxeo core events and want them audited, this is\n      the place to declare them NXAudit side.\n    \n",
              "documentationHtml": "<p>\nThose default auditable events match Nuxeo core base events.\n</p><p>\nIf you are sending new Nuxeo core events and want them audited, this is\nthe place to declare them NXAudit side.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Contributions/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2021.63.8",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n    <documentation>\n      Those default auditable events match Nuxeo core base events.\n      <p/>\n      If you are sending new Nuxeo core events and want them audited, this is\n      the place to declare them NXAudit side.\n    </documentation>\n\n    <event name=\"documentCreated\"/>\n    <event name=\"documentCreatedByCopy\"/>\n    <event name=\"documentDuplicated\"/>\n    <event name=\"documentMoved\"/>\n    <event name=\"documentRemoved\"/>\n    <event name=\"documentModified\"/>\n    <event name=\"documentLocked\"/>\n    <event name=\"documentUnlocked\"/>\n    <event name=\"documentSecurityUpdated\"/>\n    <event name=\"retentionActiveChanged\"/>\n    <event name=\"lifecycle_transition_event\"/>\n    <event name=\"loginSuccess\"/>\n    <event name=\"loginFailed\"/>\n    <event name=\"logout\"/>\n    <event name=\"documentCheckedIn\"/>\n    <event name=\"proxyRemoved\"/>\n    <event name=\"versionRemoved\"/>\n    <event name=\"documentProxyPublished\"/>\n    <event name=\"sectionContentPublished\"/>\n    <event name=\"documentRestored\"/>\n    <event name=\"download\"/>\n    <event name=\"documentTrashed\"/>\n    <event name=\"documentUntrashed\"/>\n    <event name=\"addedToCollection\"/>\n    <event name=\"removedFromCollection\"/>\n    <event name=\"afterMakeRecord\"/>\n    <event name=\"afterSetRetention\"/>\n    <event name=\"afterExtendRetention\"/>\n    <event name=\"retentionExpired\"/>\n    <event name=\"afterSetLegalHold\"/>\n    <event name=\"afterRemoveLegalHold\"/>\n    <event name=\"blobDigestUpdated\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Contributions/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2021.63.8",
              "xml": "<extension point=\"backend\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n\n    <backend class=\"org.nuxeo.ecm.platform.audit.service.DefaultAuditBackend\">\n      <require>org.nuxeo.ecm.core.persistence.PersistenceComponent</require>\n    </backend>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Contributions/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--listener",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--listener",
              "registrationOrder": 49,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2021.63.8",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.audit.listener.StreamAuditEventListener\" name=\"auditLoggerListener\" postCommit=\"false\" priority=\"500\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Contributions/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--streamProcessor",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--streamProcessor",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2021.63.8",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.platform.audit.impl.StreamAuditWriter\" defaultCodec=\"avro\" defaultConcurrency=\"1\" defaultPartitions=\"1\" enabled=\"true\" name=\"auditWriter\">\n      <policy batchCapacity=\"25\" batchThreshold=\"500ms\" continueOnFailure=\"false\" delay=\"1s\" maxDelay=\"60s\" maxRetries=\"20\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
          "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
          "requirements": [
            "org.nuxeo.ecm.platform.audit.service.persistence",
            "org.nuxeo.runtime.metrics.MetricsService"
          ],
          "resolutionOrder": 824,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.service.AuditBackend",
              "id": "org.nuxeo.ecm.platform.audit.service.AuditBackend",
              "overriden": false,
              "version": "2021.63.8"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.AuditReader",
              "id": "org.nuxeo.ecm.platform.audit.api.AuditReader",
              "overriden": false,
              "version": "2021.63.8"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.AuditLogger",
              "id": "org.nuxeo.ecm.platform.audit.api.AuditLogger",
              "overriden": false,
              "version": "2021.63.8"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.Logs",
              "id": "org.nuxeo.ecm.platform.audit.api.Logs",
              "overriden": false,
              "version": "2021.63.8"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.DocumentHistoryReader",
              "id": "org.nuxeo.ecm.platform.audit.api.DocumentHistoryReader",
              "overriden": false,
              "version": "2021.63.8"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "overriden": false,
              "version": "2021.63.8"
            }
          ],
          "startOrder": 781,
          "version": "2021.63.8",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n\n  <require>org.nuxeo.runtime.metrics.MetricsService</require>\n\n  <documentation>\n    Service that deals with audit.\n    <p />\n    Most of the work is done at EJB layer though.\n\n    This supports JMS events based\n    notifications on a dedicated topic.\n\n    @version 1.0\n    @author Julien Anguenot\n  </documentation>\n\n  <!-- needed so that activation has access to persistence -->\n  <require>org.nuxeo.ecm.platform.audit.service.persistence</require>\n\n  <implementation class=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.audit.service.AuditBackend\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.AuditReader\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.AuditLogger\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.Logs\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.DocumentHistoryReader\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" />\n  </service>\n\n  <extension-point name=\"event\">\n    <documentation>\n      This service registers auditable events.\n      <p />\n      Registered events are dummy strings for now.\n      <p />\n      This service is used to filter auditable events from the JMS topic based\n      on their names. The following XML snipset give figures out how the default\n      event types are selected for auditing.\n\n      <programlisting>\n        <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" point=\"event\">\n          <event name=\"documentCreated\" />\n          <event name=\"documentCreatedByCopy\" />\n          <event name=\"documentDuplicated\" />\n          <event name=\"documentMoved\" />\n          <event name=\"documentRemoved\" />\n          <event name=\"documentModified\" />\n          <event name=\"documentLocked\" />\n          <event name=\"documentUnlocked\" />\n          <event name=\"documentSecurityUpdated\" />\n          <event name=\"lifecycle_transition_event\" />\n          <event name=\"documentTrashed\" />\n          <event name=\"documentUntrashed\" />\n        </extension>\n      </programlisting>\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.EventDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"extendedInfo\">\n\n    <documentation>\n      This service registered extended info mappings.\n\n      <p />\n      This service is used to evaluate EL expression using document as context\n      regist:ering results into a map indexed by names.\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.ExtendedInfoDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"adapter\">\n\n    <documentation>\n      register the adapter that will be injected in EL context\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.AdapterDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"backend\">\n\n    <documentation>\n      Allows to register a backend implementation for the Audit Service\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.AuditBackendDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"storage\">\n\n    <documentation>\n      Allows to register a storage implementation for the Audit Service\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.AuditStorageDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"bulk\">\n    <documentation>\n      CAUTION: Deprecated since 10.10, audit bulker is now handled with nuxeo-stream, no replacement\n      Allows to configure bulk processing\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.AuditBulkerDescriptor\" />\n  </extension-point>\n\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" point=\"event\">\n    <documentation>\n      Those default auditable events match Nuxeo core base events.\n      <p />\n      If you are sending new Nuxeo core events and want them audited, this is\n      the place to declare them NXAudit side.\n    </documentation>\n\n    <event name=\"documentCreated\" />\n    <event name=\"documentCreatedByCopy\" />\n    <event name=\"documentDuplicated\" />\n    <event name=\"documentMoved\" />\n    <event name=\"documentRemoved\" />\n    <event name=\"documentModified\" />\n    <event name=\"documentLocked\" />\n    <event name=\"documentUnlocked\" />\n    <event name=\"documentSecurityUpdated\" />\n    <event name=\"retentionActiveChanged\" />\n    <event name=\"lifecycle_transition_event\" />\n    <event name=\"loginSuccess\" />\n    <event name=\"loginFailed\" />\n    <event name=\"logout\" />\n    <event name=\"documentCheckedIn\" />\n    <event name=\"proxyRemoved\" />\n    <event name=\"versionRemoved\" />\n    <event name=\"documentProxyPublished\" />\n    <event name=\"sectionContentPublished\" />\n    <event name=\"documentRestored\" />\n    <event name=\"download\" />\n    <event name=\"documentTrashed\" />\n    <event name=\"documentUntrashed\" />\n    <event name=\"addedToCollection\" />\n    <event name=\"removedFromCollection\" />\n    <event name=\"afterMakeRecord\" />\n    <event name=\"afterSetRetention\" />\n    <event name=\"afterExtendRetention\" />\n    <event name=\"retentionExpired\" />\n    <event name=\"afterSetLegalHold\" />\n    <event name=\"afterRemoveLegalHold\" />\n    <event name=\"blobDigestUpdated\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" point=\"backend\">\n\n    <backend class=\"org.nuxeo.ecm.platform.audit.service.DefaultAuditBackend\">\n      <require>org.nuxeo.ecm.core.persistence.PersistenceComponent</require>\n    </backend>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <listener name=\"auditLoggerListener\" async=\"false\" postCommit=\"false\" priority=\"500\"\n      class=\"org.nuxeo.ecm.platform.audit.listener.StreamAuditEventListener\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"auditWriter\" defaultConcurrency=\"1\" defaultPartitions=\"1\"\n      defaultCodec=\"${nuxeo.stream.audit.log.codec:=legacy}\" class=\"org.nuxeo.ecm.platform.audit.impl.StreamAuditWriter\"\n      enabled=\"${nuxeo.stream.audit.enabled:=true}\">\n      <policy name=\"default\" batchCapacity=\"${nuxeo.stream.audit.batch.size:=10}\"\n        batchThreshold=\"${nuxeo.stream.audit.batch.threshold.ms:=50}ms\" maxRetries=\"20\" delay=\"1s\" maxDelay=\"60s\"\n        continueOnFailure=\"false\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxaudit-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-audit-core-2021.63.8.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit",
      "id": "org.nuxeo.ecm.platform.audit",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 11.0.24\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.audit\r\nBundle-Category: web,stateful\r\nBundle-ActivationPolicy: lazy\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nImport-Package: de.odysseus.el;version=\"2.1.2\",javax.annotation;versio\r\n n=\"1.0\",javax.el,javax.management,javax.persistence,org.apache.common\r\n s.lang.builder,org.apache.commons.logging,org.nuxeo.common.xmap.annot\r\n ation,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=split,o\r\n rg.nuxeo.ecm.core.api.event,org.nuxeo.ecm.core.api.repository,org.nux\r\n eo.ecm.core.api.security,org.nuxeo.ecm.core.event,org.nuxeo.ecm.core.\r\n event.impl,org.nuxeo.ecm.core.persistence,org.nuxeo.ecm.directory;api\r\n =split,org.nuxeo.ecm.platform.audit.api,org.nuxeo.ecm.platform.audit.\r\n api.query,org.nuxeo.ecm.platform.el,org.nuxeo.runtime.api,org.nuxeo.r\r\n untime.management,org.nuxeo.runtime.model,org.osgi.framework;version=\r\n \"1.5.0\"\r\nNuxeo-Component: OSGI-INF/nxaudit-service.xml,OSGI-INF/nxaudit-persist\r\n ence-config.xml,OSGI-INF/core-type-contrib.xml,OSGI-INF/directories-c\r\n ontrib.xml,OSGI-INF/pageprovider-contrib.xml,OSGI-INF/marshallers-con\r\n trib.xml, OSGI-INF/user-audit-contrib.xml\r\nExport-Package: org.nuxeo.ecm.platform.audit.listener,org.nuxeo.ecm.pl\r\n atform.audit.service,org.nuxeo.ecm.platform.audit.service.extension,o\r\n rg.nuxeo.ecm.platform.audit.service.management\r\nBundle-Name: NXAudit Core\r\nBundle-ClassPath: .\r\nBundle-Localization: plugin\r\nPrivate-Package: .\r\n\r\n",
      "maxResolutionOrder": 824,
      "minResolutionOrder": 285,
      "packages": [],
      "requirements": [],
      "version": "2021.63.8"
    }
  ],
  "creationDate": 1732721792848,
  "key": "Nuxeo Platform-2021.63",
  "name": "Nuxeo Platform",
  "operations": [],
  "packages": [],
  "pluginSnapshots": {},
  "releaseDate": 1732721792848,
  "version": "2021.63"
}